#ifndef LECTEURSYMBOLE_H_
#define LECTEURSYMBOLE_H_

#include <fstream>
#include <string>
using namespace std;

#include "LecteurCaractere.h"
#include "Symbole.h"

/*! \file LecteurSymbole.h
\brief La spécification de la classe LecteurSymbole
Décrit la liste des méthodes et attributs associés à la classe LecteurSymbole
\author Edouard Eynard, Thibaud Celce
\date 27.12.2011
 */

/*! \class LecteurSymbole
\brief La classe représentant les LecteurSymbole.
Cette classe permet de représenter sous la forme d'un objet
le lecteur de symbole. Les méthodes suivantes sont associées
à un objet de type LecteurSymbole :
\li getSymCour
\li getLigne
\li getColonne
\li sauterSeparateurs
\li sauterCommentaire
\li motSuivant
 */

class LecteurSymbole {
public:
    /*! \fn  LecteurSymbole(string nomFich)
\brief Constructeur de la classe LecteurSymbole.
Ce constructeur charge le fichier à analyse et initialise symCour avec son premier symbole.
\param nomFich - nom du fichier à analyser.
     */
    LecteurSymbole(string nomFich); 
    /*! \fn  void suivant()
    \brief Avance au symbole suivant du fichier.
     */
    void suivant();
    /*! \fn  inline Symbole getSymCour()
  \brief retourne le symbole courant.
   \return la valeur de l'attribut symCour.
     */
    inline Symbole getSymCour() {
        return symCour;
    } 
   /*! \fn  inline unsigned int getLigne()
  \brief retourne la ligne courante.
   \return la valeur de l'attribut ligne.
     */
    inline unsigned int getLigne() {
        return ligne;
    } 
     /*! \fn  inline unsigned int getColonne()
  \brief retourne la colonne courante.
   \return la valeur de l'attribut colonne.
     */
    inline unsigned int getColonne() {
        return colonne;
    } 

private:
    LecteurCaractere lc; // le lecteur de caracteres*
    /*! \var LecteurCaractere lc
    \brief Contient un objet de type LecteurCaractere.
     */
    Symbole symCour; // le symbole courant du lecteur de symboles
    /*! \var Symbole symCour
  \brief Contient l'objet de type symbole, courant.
     */
    unsigned int ligne, colonne; // coordonnees, dans le fichier, du symbole courant
    /*! \var unsigned int ligne
  \brief Contient le numero de ligne courant.
     */
    /*! \var unsigned int colonne
  \brief Contient le numero de colonne courant.
     */
    
    /*! \fn  void sauterSeparateurs()
  \brief saute dans lc une suite de separateurs consecutifs
     */
    void sauterSeparateurs();
    /*! \fn  void sauterCommentaire()
  \brief saute dans lc la ligne de commentaire
     */
    void sauterCommentaire(); 
      /*! \fn  string motSuivant()
  \brief  lit dans lc la chaine du prochain symbole et la renvoie en resultat
   \return la chaine du prochain symbole.
     */
    string motSuivant(); 
};

#endif /* LECTEURSYMBOLE_H_ */ 
